﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;

namespace Main.Packets
{
    /// <summary>
    /// Paquet d'aquittement négatif ou positif.
    /// </summary>
    public class AcknowledgementPacket : Packet
    {
        private AcknowledgementPacket(byte numeroConnexion, PacketType type)
            : base(numeroConnexion, type)
        {

        }

        /// <summary>
        /// Instanciation d'un packet à partir d'une ligne reçu de la couche liaison.
        /// </summary>
        public static AcknowledgementPacket CreateAcknowledgementPacket(string str)
        {
            return JsonConvert.DeserializeObject<AcknowledgementPacket>(str) as AcknowledgementPacket;
        }

        /// <summary>
        /// Instanciation d'un packet d'aquittement négatif à partir des paramètres requis.
        /// </summary>
        public static AcknowledgementPacket CreateNegativeAcknowledgementPacket(byte numeroConnexion, int pr)
        {
            PacketType type = PacketType.CreateTypeForNegativeAcknowledgmentPacket(pr);
            return new AcknowledgementPacket(numeroConnexion, type);
        }

        /// <summary>
        /// Instanciation d'un packet d'aquittement positif à partir des paramètres requis.
        /// </summary>
        public static AcknowledgementPacket CreatePositiveAcknowledgementPacket(byte numeroConnexion, int pr)
        {
            PacketType type = PacketType.CreateTypeForPositiveAcknowledgmentPacket(pr);
            return new AcknowledgementPacket(numeroConnexion, type);
        }

        /// <summary>
        /// Envoie d'un paquet d'aquittement positif ou négatif vers le flux passé en paramètre.
        /// </summary>
        /// <param name="sw"></param>
        public override void Send(System.IO.StreamWriter sw)
        {
            sw.WriteLine(JsonConvert.SerializeObject(this));
        }
    }
}
